<?php
class WebSettingController extends BController
{
	public function filters(){return array('rights');}
	
	public function actionIndex()
	{
		$this->pageTitle = Yii::t('websetting', 'Cấu hình');
		$criteria = new CDbCriteria;
		$criteria->order = 'name ASC';
		$criteria->with = array('settings');

		$dataProvider = new CActiveDataProvider('WebSettingGroup',array(
			'criteria'=>$criteria,
			'pagination'=>array('pageSize'=>100)
		));

		$this->render('index', array('dataProvider'=>$dataProvider));
	}
	
	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate($group_id=NULL)
	{
		$this->pageTitle = Yii::t('websetting', 'Thêm cài đặt mới');
		$model=new WebSetting;
		$model->group_id = $group_id;
		if($model->group===NULL)
		{
			Yii::app()->user->setFlash('error',Yii::t('websetting', 'Nhóm không tồn tại hoặc đã thay đổi.'));
			$this->redirect(array('index'));
		}

		if(isset($_POST['WebSetting']))
		{
			$model->attributes=$_POST['WebSetting'];
			if($model->save()) 
			{
				Yii::app()->user->setFlash('success',Yii::t('websetting','Đã tạo thông số cài đặt thành công.'));
				if(isset($_POST['save']))
					$this->redirect(array('edit','id'=>$model->id));
				else if(isset($_POST['done']))
					$this->redirect(array('index'));
			}
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	* Allow Developer to set advance settings
	**/
	public function actionEdit($id)
	{
		$this->pageTitle = Yii::t('websetting', 'Cập nhật nâng cao');
		$model=$this->loadModel($id);

		if(isset($_POST['WebSetting']))
		{
			$model->attributes=$_POST['WebSetting'];

			if($model->save()) 
			{
				Yii::app()->user->setFlash('success',Yii::t('websetting','Đã cập nhật thông số.'));

				if(isset($_POST['save']))
					$this->refresh();
				else if(isset($_POST['done']))
					$this->redirect(array('index'));
			}
		}

		$this->render('edit',array(
			'model'=>$model,
		));
	}

	public function actionRemoveFile($id)
	{
		if(Yii::app()->request->isPostRequest)
		{
			$model = $this->loadModel($id);
			@unlink($model->value);
			$model->value = "";
			$model->update(array('value'));
			Yii::app()->user->setFlash('success',Yii::t('websetting','Đã xóa file.'));
			$this->redirect(array('update','id'=>$model->id));
		}
		else
			throw new CHttpException(400,Yii::t('backend','Thao tác không hợp lệ, vui lòng không lặp lại.'));		
	}

	/**
	 * Updates a particular model, usually used by user
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$this->pageTitle = Yii::t('websetting', 'Cập nhật cơ bản');
		$model=$this->loadModel($id);

		if(isset($_POST['WebSetting']))
		{
			$lastValue = $model->value;
			$model->attributes=$_POST['WebSetting'];
			if($model->type=='fileField')
			{
				$file = CUploadedFile::getInstance($model, 'value');
				if($file!==NULL)
				{
					$model->value = NFile::createPath(WebSetting::UPLOAD_FOLDER) . $model->key . '.' . $file->extensionName;
					$file->saveAs($model->value);
					// delete previous file if any
					@unlink($lastValue);
				}
			}

			if($model->save())
			{
				Yii::app()->user->setFlash('success',Yii::t('websetting','Đã cập nhật thông số.'));
				if(isset($_POST['save']))
					$this->refresh();
				else if(isset($_POST['done']))
					$this->redirect(array('index'));
			}
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'index' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		// we only allow deletion via POST request
		if(Yii::app()->request->isPostRequest)
		{
			Yii::import('ext.FindTxt');
			$model = $this->loadModel($id);

			// Kiểm tra xem key này đang được dùng ở những file nào?
			$f = new FindTxt;
			$f->caseSensitive = false;
			$f->excludeMode = false;
			$f->formats = array('.php');
			$strToFind = "WebSetting::get('".$model->key."')";
			$res1 = $f->find('protected/modules', $strToFind);
			$res2 = $f->find('protected/controllers', $strToFind);
			$res3 = $f->find('protected/models', $strToFind);
			$res4 = $f->find('protected/views', $strToFind);
			$res5 = $f->find('protected/components', $strToFind);
			$res = CMap::mergeArray($res1, $res2, $res3, $res4, $res5);

			// Chỉ cho phép xóa khi không có file nào sử dụng key này.
			if(count($res)==0)
			{
				$model->delete();
				Yii::app()->user->setFlash('success',Yii::t('websetting', 'Đã xóa thông số {key}.', array('{key}'=>$model->key)));
				
				echo CJSON::encode(array('result'=>'success','url'=>($this->createUrl('index'))));
			}
			else
			{
				echo CJSON::encode(array('result'=>'error','files'=>$res));
			}

		}
		else
			throw new CHttpException(400,Yii::t('backend','Thao tác không hợp lệ, vui lòng không lặp lại.'));
	}

	/** MANAGE GROUPs **/
	public function actionCreateGroup()
	{
		$model = new WebSettingGroup;
		$model->name = Yii::t('websetting','Phân nhóm');
		$model->description = Yii::t('websetting','Mô tả...');
		$model->save();
		$model->name .= ' #' . $model->id;
		$model->update(array('name'));

		if(Yii::app()->request->isAjaxRequest)
		{
			echo CJSON::encode(array(
				'result'=>'success',
				'html'=>$this->renderPartial('_view',array('data'=>$model), true)));
		}
		else
		{
			Yii::app()->user->setFlash('success',Yii::t('websetting','Thêm nhóm mới thành công.'));
			$this->redirect(array('index'));
		}
	}
	
	/** AJAX fuction **/
	public function actionUpdateGroupAttr($id, $attr)
	{
		if(!Yii::app()->request->isAjaxRequest || ! in_array($attr, array('name','description')))
			throw new CHttpException(403, Yii::t('backend','Chỉ chấp nhận yêu cầu Ajax.'));
		
		$model = WebSettingGroup::model()->findByPk($id);
		if($model===NULL) 
		{
			echo CJSON::encode(array('result'=>'fail'));
		}
		else
		{
			$model->{$attr} = Yii::app()->request->getPost('_value');
			if($model->save(true, array($attr)))
			{
				echo CJSON::encode(array('result'=>'success','value'=>$model->{$attr}));
			}
			else
			{
				echo CJSON::encode(array('result'=>'error','errors'=>$model->errors));
			}
		}
	}
	
	/* AJAX function */
	public function actionDeleteGroup($id)
	{
		if(Yii::app()->request->isAjaxRequest)
		{
			$group = WebSettingGroup::model()->with('settings')->findByPk((int)$id);
			if($group!==NULL && count($group->settings)==0)
			{
				$group->delete();
				echo CJSON::encode(array('result'=>'success'));
			}
			else
			{
				echo CJSON::encode(array('result'=>'error'));
			}
		}
		else
			throw new CHttpException(403, Yii::t('backend','Chỉ chấp nhận yêu cầu Ajax.'));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the ID of the model to be loaded
	 */
	public function loadModel($id)
	{
		$model=WebSetting::model()->findByPk((int)$id);
		if($model===null) 
			throw new CHttpException(404,Yii::t('common',"Dữ liệu được yêu cầu không đúng hoặc đã bị xóa."));	
		return $model;
	}
}
